【iOS】【小ネタ】UISearchBarのsubviewsをのぞいてみたら
おばんです、杜王町出身としては「七夕は8月ですからァ!」という確固たる意志を持っている田中です。
UISearchBarの虫眼鏡の色を変えたいなぁと思って少し調べてたりしていました。 subviewsをprintしてみると見慣れないクラス名を見かけたので、七夕も会社の創設記念日も関係なく今回はその話です。
Viewの階層を見てみた
Capture View Hierarchyしてみた。
階層で見てみると
- UISearchBarBackground
- UISearchBarTextField
- _SearchBarSearchFieldBackgroundView
など見慣れないクラス名がある。
それぞれアイコンを見ればわかるように
- UISearchBarBackground: UIImageViewのサブクラス
- UISearchBarTextField: UITextFieldのサブクラス
- _SearchBarSearchFieldBackgroundView: UIImageViewのサブクラス
となっているようです。
冒頭で述べたようにview要素を操作したいとすればsubviewsで潜っていって、それぞれキャストして操作することができるということのようですね。
虫眼鏡の色を変える
ちなみに上で書いたように虫眼鏡の色を変えるには、UISearchBarTextFieldのleftViewプロパティに該当Viewがsetされているようですのでそれにアクセスします。 ソースコードはこんな感じです。
let searchTextField = searchBar.subviews[0].subviews[1] as! UITextField let grassImageView = searchTextField.leftView as! UIImageView let magnifyingGlassImage = grassImageView.image!.imageWithRenderingMode(.AlwaysTemplate) grassImageView.image = magnifyingGlassImage grassImageView.tintColor = UIColor.cyanColor()
注意点
subViewsで潜っていく方法で固定的にコードを書いているとOSの変更時に階層構造が変わったりしたときに想定通りの動作にならないので注意しましょう。
まとめ
UISearchBarに限らず、ほかのView要素も同じようになってるものがあると思われます。知らなんだ...。